

#include<cassert>
#include<stdio.h>
#include <stdlib.h>
#include "tableau.h"


void initialiseTableau(TableauOp to[])
{
    to->fin=0;
}

TableauOp* creerTableau()
{
    TableauOp* to;
    to=(TableauOp*)malloc(sizeof(TableauOp));
    if(to==NULL)
    	{
      		printf("allocation impossible \n");
       		exit(EXIT_FAILURE);
    	}
    initialiseTableau(to);
    return to;
}

Option* getIemeOptionTableau(const TableauOp to[],const int i)
{
    assert( i < to->fin );
    return (to->tab[i]);
}


int getFinTableau(const TableauOp to[])
{
    return (to->fin);
}

void setFinTableau(TableauOp to[], const int f)
{
        to->fin = f;
}


void remplirTableau(TableauOp to[],Option* op)/*n'alloue pas de place pour l'option*/
{
    to->tab [ to->fin ] = op;
    (to->fin)++;
}

void actualiserTableau(TableauOp to[])
{
    int i,j;
    int f = getFinTableau(to);
    for(i=0 ; i < f ; i++)
    {
            if ( (to->tab[i]->numero) ==0 )
            {
                libereOption(to->tab[i]);
                for( j = i ; j < f ; j++)
                {
                    to->tab[j] = to->tab[j+1];
                }
                f--;
            }
    }
    setFinTableau(to,f);
}

void supprimerElementTableau(TableauOp to[],int i)/*libere aussi l'option*/
{
	int f = getFinTableau(to);
	assert(i < f);
    setNumeroOption(to->tab[i],0);
    actualiserTableau(to);
}

void libereTouteOptionTableau(TableauOp to[])
{
    int i;
    int f=getFinTableau(to);
    for(i = 0 ; i < f ; i++)
    {
        libereOption(to->tab[i]);
    }
}

void libereTableau(TableauOp to[])
{
    libereTouteOptionTableau(to);
    free(to);
}


